package jp.oesf.rssreader;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import org.xmlpull.v1.XmlPullParser;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

public class RssMain extends Activity {
 	
	// 接続先URL
	private static final String mURL = "http://192.168.12.41:8080/files/oesf_rss.xml";	//ネットワーク接続可
	
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

	}
	
	public void onClickSearchButton(View v){
		//一覧表示ボタンを押下したとき
		Intent intent = new Intent(this, SummaryList.class);
		startActivity(intent);
	}
	
	public void onClickCategorySearchButton(View v){
		//カテゴリ別表示ボタンを押下したとき
		Intent intent = new Intent(this, CategoryChoice.class);
		startActivity(intent);
	}


	@Override
	// オプションメニューが最初に呼び出される時に1度だけ呼び出されます
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
        MenuInflater menuInfalter = getMenuInflater();
        //メニュー作成
        menuInfalter.inflate(R.menu.menu, menu);
        return true;

	}

	@Override
	// オプションメニュー「登録」が選択された時に呼び出されます
	public boolean onOptionsItemSelected(MenuItem item) {
		//データの設定
		String title = null;
		String link = null;
		String description = null;
		String pubDate = null;
		String guid = null;
		String category = null;
		
		long rowId = 0;	//データ更新件数
		
		
//		Log.v("xmlString= ", xmlString);

//		講習で習ったやり方
//		XmlHelper xmlHelper = XmlHelper.getInstance();
//		xmlHelper.parseXmlPullparser(, xmlString)

		//XmlPullParserの作成
		XmlPullParser xmlPullParser = Xml.newPullParser();
		
		try{

			//指定URLのURLオブジェクトを生成
			URL url = new URL(mURL);
			
			//UMLの内容をxmlPullParserで開く
			xmlPullParser.setInput(url.openStream(),"UTF-8");
			
			//イベントタイプを格納するrssDataeventを定義
			  //　参考　イベントタイプ　＝　START＿TAG、TEXT、END＿TAG
			int rssDataevent;
			
			Boolean first = true;		//初回判定用フラグ
			int insertCnt = 0;			//更新件数カウンタ
			
			//SQLiteOpenHelperインスタンスを生成
			RssSQLiteOpenHelper databaseOpenHelper = 
									new RssSQLiteOpenHelper(this);
			
			//データベース　インスタンス
			SQLiteDatabase database = null;
				
			// 書き込み専用のSQLiteDatabaseオブジェクトを取得する
			database = databaseOpenHelper.getWritableDatabase();
			
			// isnertデータ用のクラス生成 （ContentValuesインスタンスにカラムと値を設定）
			ContentValues values = new ContentValues();
		
			while((rssDataevent = xmlPullParser.next()) 	//イベントを取得しデータの終わりまでループ
										 != xmlPullParser.END_DOCUMENT){
			
				if(rssDataevent == xmlPullParser.START_TAG){	//イベントが開始タグであるか？
					String tag = xmlPullParser.getName();
					//１．titleタグの時
					if(tag.equals("title")){
						//
						if(first){	//1回目のtitleタグの場合
							//DBを削除&新規作成
							database.execSQL("DROP TABLE " 
									+ 	RssSQLiteOpenHelper.RSS_TABLE + ";");
							database.execSQL("CREATE TABLE " + RssSQLiteOpenHelper.RSS_TABLE + 
									"(_id INTEGER PRIMARY KEY AUTOINCREMENT" +
									",title TEXT not null" +
									", link TEXT " + ", description TEXT" +
									", pubDate TEXT" + ", guid TEXT" + ", category TEXT" +
									");");
						}else{		//２回目以降のtitleタグの場合
							//ストックデータをテーブルへ追加
							values.put("title", title);
							values.put("link", link);
							values.put("description", description);
							values.put("pubDate", pubDate);
							values.put("guid", guid);
							values.put("category", category);

							// データを追加する（）　戻り値はid(主キー)
							rowId = 
								database.insert(RssSQLiteOpenHelper.RSS_TABLE, null, values);
							Log.v("AddActivity", "　RowID:=　" + rowId);					
							insertCnt++;
						}
						title = xmlPullParser.nextText();
						first = false;
					}
					//２．linkタグの時
					if(tag.equals("link")){
						link = xmlPullParser.nextText();
					}
					//３．descriptionタグの時
					if(tag.equals("description")){
						description = xmlPullParser.nextText();
					}
					//４．pubDateタグの時
					if(tag.equals("pubDate")){
						pubDate = xmlPullParser.nextText();
					}
					//５．guidタグの時
					if(tag.equals("guid")){
						guid = xmlPullParser.nextText();
					}
					//６．categoryタグの時
					if(tag.equals("category")){
						category = xmlPullParser.nextText();
					}
				}
			}	

		
			if(!first){ 
				//最終データをテーブルへ追加
				values.put("title", title);
				values.put("link", link);
				values.put("description", description);
				values.put("pubDate", pubDate);
				values.put("guid", guid);
				values.put("category", category);
	
				// データを追加する（）　戻り値はid(主キー)
				rowId = 
					database.insert(RssSQLiteOpenHelper.RSS_TABLE, null, values);
				insertCnt++;	
			}
			// データベースから切断する
			databaseOpenHelper.close();
			
			if (rowId != -1) {	
				//無事更新された場合はToastを表示し、この登録画面を終了する
				Toast.makeText(this,insertCnt + "件登録しました" , Toast.LENGTH_LONG).show();
//				Toast.makeText(this,insertCnt + R.string.add_complete , Toast.LENGTH_LONG).show();
//				Toast.makeText(this,R.string.add_complete , Toast.LENGTH_LONG).show();
//				finish();
			}
		
		} catch (MalformedURLException e1) {
		// TODO Auto-generated catch block+
			Log.v("RssMain　EXCEPTION","1");	
			Toast.makeText(this,"接続エラー" , Toast.LENGTH_LONG).show();
			e1.printStackTrace();
		
		} catch (IOException e1) {
		// TODO Auto-generated catch block
			Log.v("RssMain　EXCEPTION","2");	
			Toast.makeText(this,"接続エラー " , Toast.LENGTH_LONG).show();
			e1.printStackTrace();
		}catch (Exception e) {
			// TODO: handle exception
			Log.v("RssMain　EXCEPTION","3");	
			Toast.makeText(this,"接続エラー" , Toast.LENGTH_LONG).show();
		}
		
		
// 画面遷移のコード		
//		Intent intent = new Intent(this, AddActivity.class);
//		startActivity(intent);
		return true;
	}
}

